package xyz.riceball.usercore.service;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import xyz.riceball.framework.core.bean.ApiR;
import xyz.riceball.usercore.entity.dto.RouteDTO;
import xyz.riceball.usercore.entity.po.RoutePO;

import java.util.List;

/**
 * 路由表(Route)表服务接口
 *
 * @author xiaovcloud
 * @since 2022-04-24 20:17:50
 */
public interface RouteService extends IService<RoutePO> {
    /**
     * 查询出免登录的接口
     *
     * @return
     */
    List<RoutePO> selectByNoLogin(int methodType);

    /**
     * 查询出需登录的接口
     *
     * @return
     */
    List<RoutePO> selectByLogin(int methodType);

    /**
     * 根据ID集合和请求方法查询出需授权的接口
     *
     * @param ids
     * @return
     */
    List<RoutePO> selectByIdsAndRequestMethod(List<String> ids);

//    /**
//     * 根据userId获取路由
//     *
//     * @param userId
//     * @return
//     */
//    Map<String, RoutePO> selectRouteByUserId(String userId);

    /**
     * 刷新路由
     *
     * @return
     */
    boolean refresh();

    /**
     * 树形获取所有有效的接口
     *
     * @return
     */
    List<Tree<String>> tree();

    /**
     * 根据角色和请求方式获取权限
     * @param roleList
     * @param methodType
     * @return
     */
    List<RoutePO> selectRouteByRolesAndMethodType(List<String> roleList, int methodType);

    /**
     * 新增功能
     *
     * @param routeDTO
     * @return RouteDTO
     */
    ApiR<RouteDTO> add(RouteDTO routeDTO);

    /**
     * 修改功能
     *
     * @param routeDTO
     * @return
     */
    boolean edit(RouteDTO routeDTO);

    /**
     * 删除功能
     *
     * @param ids
     * @return
     */
    ApiR<Void> delete(List<String> ids);

    /**
     * 分页展示功能
     *
     * @param page
     * @param routePO
     * @return
     */
    Page<RoutePO> selectPage(Page<RoutePO> page, RoutePO routePO);
}

